package org.vs.test.contract;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.DynamicStruct;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.StaticStruct;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.RemoteFunctionCall;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;
import org.web3j.tx.gas.ContractGasProvider;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 1.5.0.
 */
@SuppressWarnings("rawtypes")
public class __VoteContract04_sol_VoteContract04 extends Contract {
    public static final String BINARY = "608060405234801561001057600080fd5b50611a2c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c806382be72651161008c578063cc2ee19611610066578063cc2ee196146101ce578063db424dee146101e3578063fdaafa64146101eb578063ff3c1a8f146101fe576100e9565b806382be726514610186578063af1de66f146101a6578063c6e48ab0146101b9576100e9565b8063665efb4a116100c8578063665efb4a14610136578063703d6d131461014957806372910be01461015e5780637b8b012214610171576100e9565b80623259ea146100ee57806325dff9d11461010c57806347515b8c14610121575b600080fd5b6100f6610213565b60405161010391906116ca565b60405180910390f35b61011461039f565b6040516101039190611626565b61013461012f366004611257565b6105df565b005b61013461014436600461116a565b6106d4565b610151610784565b6040516101039190611717565b61013461016c36600461135d565b610860565b610179610877565b60405161010391906118ad565b61019961019436600461135d565b61087d565b6040516101039190611757565b6101346101b43660046113ee565b6108b9565b6101c1610922565b604051610103919061150d565b6101d6610a9a565b604051610103919061158b565b610199610d2c565b6101346101f9366004611398565b610d48565b610206610f01565b6040516101039190611762565b6060600060095467ffffffffffffffff81111561024057634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561027957816020015b610266610fd4565b81526020019060019003908161025e5790505b50905060005b6009548110156102eb576040805180820182526000838152600860209081529281205482529181019190915282518390839081106102cd57634e487b7160e01b600052603260045260246000fd5b602002602001018190525080806102e3906119af565b91505061027f565b5060005b600c54811015610399576000818152600b6020526040902080546001909101548351849190811061033057634e487b7160e01b600052603260045260246000fd5b6020026020010151602001516103469190611910565b6000828152600b60205260409020600101548351849190811061037957634e487b7160e01b600052603260045260246000fd5b602090810291909101810151015280610391816119af565b9150506102ef565b50905090565b60408051600180825281830190925260609160009190816020015b6103c2610fee565b8152602001906001900390816103ba57905050905060006040518060a00160405290816000820180546103f490611958565b80601f016020809104026020016040519081016040528092919081815260200182805461042090611958565b801561046d5780601f106104425761010080835404028352916020019161046d565b820191906000526020600020905b81548152906001019060200180831161045057829003601f168201915b5050505050815260200160018201805461048690611958565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290611958565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050815260200160028201805461051890611958565b80601f016020809104026020016040519081016040528092919081815260200182805461054490611958565b80156105915780601f1061056657610100808354040283529160200191610591565b820191906000526020600020905b81548152906001019060200180831161057457829003601f168201915b5050505050815260200160038201548152602001600482015481525050816000815181106105cf57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152905090565b600954156106085760405162461bcd60e51b81526004016105ff9061185c565b60405180910390fd5b60005b81518161ffff1610156106cd576000828261ffff168151811061063e57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015161ffff841660009081526008835260409020815181558183015180519294508493919261067d926001850192019061101d565b506040820151805161069991600284019160209091019061101d565b50606082015180516106b591600384019160209091019061101d565b509050505080806106c59061198d565b91505061060b565b5051600955565b600654156106f45760405162461bcd60e51b81526004016105ff90611877565b60005b815181101561077d57600082828151811061072257634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526005835260409020815181558183015180519294508493919261075c926001850192019061101d565b50604091909101516002909101555080610775816119af565b9150506106f7565b5051600655565b60606000600c5467ffffffffffffffff8111156107b157634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ea57816020015b6107d7610fd4565b8152602001906001900390816107cf5790505b50905060005b600c54811015610399576000818152600b60209081526040918290208251808401909352805483526001015490820152825183908390811061084257634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610858906119af565b9150506107f0565b805161087390600090602084019061101d565b5050565b60095490565b60008060078360405161089091906114f1565b90815260200160405180910390205490506001915080600014156108b357600091505b50919050565b8051805182916000916108d391839160209091019061101d565b5060208281015180516108ec926001850192019061101d565b506040820151805161090891600284019160209091019061101d565b506060820151600382015560809091015160049091015550565b6060600060065467ffffffffffffffff81111561094f57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561098857816020015b6109756110a1565b81526020019060019003908161096d5790505b50905060005b6006548110156103995760056000828152602001908152602001600020604051806060016040529081600082015481526020016001820180546109d090611958565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc90611958565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b50505050508152602001600282015481525050828281518110610a7c57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610a92906119af565b91505061098e565b6060600060095467ffffffffffffffff811115610ac757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610b0057816020015b610aed6110c2565b815260200190600190039081610ae55790505b50905060005b600954811015610399576008600082815260200190815260200160002060405180608001604052908160008201548152602001600182018054610b4890611958565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7490611958565b8015610bc15780601f10610b9657610100808354040283529160200191610bc1565b820191906000526020600020905b815481529060010190602001808311610ba457829003601f168201915b50505050508152602001600282018054610bda90611958565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690611958565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b50505050508152602001600382018054610c6c90611958565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9890611958565b8015610ce55780601f10610cba57610100808354040283529160200191610ce5565b820191906000526020600020905b815481529060010190602001808311610cc857829003601f168201915b505050505081525050828281518110610d0e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610d24906119af565b915050610b06565b6003546000904210801590610d4357506004544211155b905090565b610d50610d2c565b610d6c5760405162461bcd60e51b81526004016105ff90611892565b610d7581610f95565b610d915760405162461bcd60e51b81526004016105ff90611826565b610d9a8261087d565b610db65760405162461bcd60e51b81526004016105ff90611841565b60008060005b600654811015610e785784604051602001610dd79190611762565b60408051601f198184030181528282528051602091820120600085815260058352929092209192610e0c92600101910161177c565b604051602081830303815290604052805190602001201415610e66576000600786604051610e3a91906114f1565b908152602001604051809103902081905550600560008281526020019081526020016000206002015492505b80610e70816119af565b915050610dbc565b5060005b600954811015610eb65760008181526008602052604090205461ffff85161415610ea4578091505b80610eae816119af565b915050610e7c565b506040805180820182528381526020808201848152600c80546000908152600b9093529390912082518155905160019182015591549091610ef79190611910565b600c555050505050565b6060600080018054610f1290611958565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3e90611958565b8015610f8b5780601f10610f6057610100808354040283529160200191610f8b565b820191906000526020600020905b815481529060010190602001808311610f6e57829003601f168201915b5050505050905090565b6000805b6009548110156108b35760008181526008602052604090205461ffff84161415610fc257600191505b80610fcc816119af565b915050610f99565b604051806040016040528060008152602001600081525090565b6040518060a0016040528060608152602001606081526020016060815260200160008152602001600081525090565b82805461102990611958565b90600052602060002090601f01602090048101928261104b5760008555611091565b82601f1061106457805160ff1916838001178555611091565b82800160010185558215611091579182015b82811115611091578251825591602001919060010190611076565b5061109d9291506110ea565b5090565b60405180606001604052806000815260200160608152602001600081525090565b6040518060800160405280600081526020016060815260200160608152602001606081525090565b5b8082111561109d57600081556001016110eb565b600082601f83011261110f578081fd5b813567ffffffffffffffff811115611129576111296119e0565b61113c601f8201601f19166020016118b6565b818152846020838601011115611150578283fd5b816020850160208301379081016020019190915292915050565b6000602080838503121561117c578182fd5b823567ffffffffffffffff80821115611193578384fd5b818501915085601f8301126111a6578384fd5b81356111b96111b4826118e0565b6118b6565b81815284810190848601875b8481101561124857813587016060818d03601f190112156111e457898afd5b60408051606081018181108a82111715611200576112006119e0565b8252828b013581528282013589811115611218578c8dfd5b6112268f8d838701016110ff565b828d0152506060929092013590820152845292870192908701906001016111c5565b50909998505050505050505050565b60006020808385031215611269578182fd5b823567ffffffffffffffff80821115611280578384fd5b818501915085601f830112611293578384fd5b81356112a16111b4826118e0565b81815284810190848601875b848110156112485781358701608080601f19838f030112156112cd578a8bfd5b6112d6816118b6565b8a83013581526040830135898111156112ed578c8dfd5b6112fb8f8d838701016110ff565b8c83015250606083013589811115611311578c8dfd5b61131f8f8d838701016110ff565b604083015250908201359088821115611336578b8cfd5b6113448e8c848601016110ff565b60608201528652505092870192908701906001016112ad565b60006020828403121561136e578081fd5b813567ffffffffffffffff811115611384578182fd5b611390848285016110ff565b949350505050565b600080604083850312156113aa578081fd5b823567ffffffffffffffff8111156113c0578182fd5b6113cc858286016110ff565b925050602083013561ffff811681146113e3578182fd5b809150509250929050565b6000602082840312156113ff578081fd5b813567ffffffffffffffff80821115611416578283fd5b9083019060a08286031215611429578283fd5b61143360a06118b6565b823582811115611441578485fd5b61144d878286016110ff565b825250602083013582811115611461578485fd5b61146d878286016110ff565b602083015250604083013582811115611484578485fd5b611490878286016110ff565b604083015250606083013560608201526080830135608082015280935050505092915050565b600081518084526114ce816020860160208601611928565b601f01601f19169290920160200192915050565b80518252602090810151910152565b60008251611503818460208701611928565b9190910192915050565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561157d57603f19898403018552815160608151855288820151818a87015261155f828701826114b6565b92890151958901959095525094870194925090860190600101611531565b509098975050505050505050565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561157d57603f19898403018552815160808151855288820151818a8701526115dd828701826114b6565b91505087820151858203898701526115f582826114b6565b9150506060808301519250858203818701525061161281836114b6565b9689019694505050908601906001016115af565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561157d57603f19898403018552815160a08151818652611670828701826114b6565b915050888201518582038a87015261168882826114b6565b91505087820151858203898701526116a082826114b6565b6060848101519088015260809384015193909601929092525050938601939086019060010161164a565b602080825282518282018190526000919060409081850190868401855b8281101561170a576116fa8483516114e2565b92840192908501906001016116e7565b5091979650505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561170a576117478483516114e2565b9284019290850190600101611734565b901515815260200190565b60006020825261177560208301846114b6565b9392505050565b600060208083528184548360028204905060018083168061179e57607f831692505b8583108114156117bc57634e487b7160e01b87526022600452602487fd5b6117c883878a016118ad565b8180156117dc57600181146117ed57611817565b60ff19861682528782019650611817565b6117f68b611904565b895b86811015611811578154848201529085019089016117f8565b83019750505b50949998505050505050505050565b6020808252600190820152600d60fa1b604082015260600190565b6020808252600190820152603360f81b604082015260600190565b6020808252600190820152601960f91b604082015260600190565b6020808252600190820152603160f81b604082015260600190565b6020808252600190820152603560f81b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff811182821017156118d8576118d86119e0565b604052919050565b600067ffffffffffffffff8211156118fa576118fa6119e0565b5060209081020190565b60009081526020902090565b60008219821115611923576119236119ca565b500190565b60005b8381101561194357818101518382015260200161192b565b83811115611952576000848401525b50505050565b60028104600182168061196c57607f821691505b602082108114156108b357634e487b7160e01b600052602260045260246000fd5b600061ffff808316818114156119a5576119a56119ca565b6001019392505050565b60006000198214156119c3576119c36119ca565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122056803807a4ff8131a96772840e5fbe4b27cee632eacb9c7add67b4f319cd707564736f6c63430008000033";

    public static final String FUNC_GETELECTORS = "getElectors";

    public static final String FUNC_GETOPTIONLENGTH = "getOptionLength";

    public static final String FUNC_GETOPTIONS = "getOptions";

    public static final String FUNC_GETTITLE = "getTitle";

    public static final String FUNC_GETVOTEINFO = "getVoteInfo";

    public static final String FUNC_GETVOTEDS = "getVoteds";

    public static final String FUNC_SETELECTOR = "setElector";

    public static final String FUNC_SETOPTIONS = "setOptions";

    public static final String FUNC_SETTITLE = "setTitle";

    public static final String FUNC_SETVOTEINFO = "setVoteInfo";

    public static final String FUNC_VERIFYHAVEVOTED = "verifyHaveVoted";

    public static final String FUNC_VERIFYLEGALTIME = "verifyLegalTime";

    public static final String FUNC_VOTE = "vote";

    public static final String FUNC_VOTERESULT = "voteResult";

    @Deprecated
    protected __VoteContract04_sol_VoteContract04(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected __VoteContract04_sol_VoteContract04(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected __VoteContract04_sol_VoteContract04(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected __VoteContract04_sol_VoteContract04(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(BINARY, contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public RemoteFunctionCall<List> getElectors() {
        final Function function = new Function(FUNC_GETELECTORS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Elector>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<BigInteger> getOptionLength() {
        final Function function = new Function(FUNC_GETOPTIONLENGTH, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteFunctionCall<List> getOptions() {
        final Function function = new Function(FUNC_GETOPTIONS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Option>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<String> getTitle() {
        final Function function = new Function(FUNC_GETTITLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteFunctionCall<List> getVoteInfo() {
        final Function function = new Function(FUNC_GETVOTEINFO, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<VoteInfo>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<List> getVoteds() {
        final Function function = new Function(FUNC_GETVOTEDS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Voted>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteFunctionCall<TransactionReceipt> setElector(List<Elector> _electors) {
        final Function function = new Function(
                FUNC_SETELECTOR, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.DynamicArray<Elector>(Elector.class, _electors)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setOptions(List<Option> _options) {
        final Function function = new Function(
                FUNC_SETOPTIONS, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.DynamicArray<Option>(Option.class, _options)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setTitle(String _title) {
        final Function function = new Function(
                FUNC_SETTITLE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.Utf8String(_title)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<TransactionReceipt> setVoteInfo(VoteInfo _voteInfo) {
        final Function function = new Function(
                FUNC_SETVOTEINFO, 
                Arrays.<Type>asList(_voteInfo), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<Boolean> verifyHaveVoted(String sign) {
        final Function function = new Function(FUNC_VERIFYHAVEVOTED, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.Utf8String(sign)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<Boolean> verifyLegalTime() {
        final Function function = new Function(FUNC_VERIFYLEGALTIME, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteFunctionCall<TransactionReceipt> vote(String sign, BigInteger optionId) {
        final Function function = new Function(
                FUNC_VOTE, 
                Arrays.<Type>asList(new org.web3j.abi.datatypes.Utf8String(sign), 
                new org.web3j.abi.datatypes.generated.Uint16(optionId)), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteFunctionCall<List> voteResult() {
        final Function function = new Function(FUNC_VOTERESULT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<VoteResultVo>>() {}));
        return new RemoteFunctionCall<List>(function,
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    @Deprecated
    public static __VoteContract04_sol_VoteContract04 load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new __VoteContract04_sol_VoteContract04(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static __VoteContract04_sol_VoteContract04 load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new __VoteContract04_sol_VoteContract04(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static __VoteContract04_sol_VoteContract04 load(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return new __VoteContract04_sol_VoteContract04(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static __VoteContract04_sol_VoteContract04 load(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new __VoteContract04_sol_VoteContract04(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<__VoteContract04_sol_VoteContract04> deploy(Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(__VoteContract04_sol_VoteContract04.class, web3j, credentials, contractGasProvider, BINARY, "");
    }

    @Deprecated
    public static RemoteCall<__VoteContract04_sol_VoteContract04> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(__VoteContract04_sol_VoteContract04.class, web3j, credentials, gasPrice, gasLimit, BINARY, "");
    }

    public static RemoteCall<__VoteContract04_sol_VoteContract04> deploy(Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return deployRemoteCall(__VoteContract04_sol_VoteContract04.class, web3j, transactionManager, contractGasProvider, BINARY, "");
    }

    @Deprecated
    public static RemoteCall<__VoteContract04_sol_VoteContract04> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(__VoteContract04_sol_VoteContract04.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, "");
    }

    public static class Elector extends DynamicStruct {
        public BigInteger id;

        public String sign;

        public BigInteger weight;

        public Elector(BigInteger id, String sign, BigInteger weight) {
            super(new org.web3j.abi.datatypes.generated.Uint256(id), 
                    new org.web3j.abi.datatypes.Utf8String(sign), 
                    new org.web3j.abi.datatypes.generated.Uint256(weight));
            this.id = id;
            this.sign = sign;
            this.weight = weight;
        }

        public Elector(Uint256 id, Utf8String sign, Uint256 weight) {
            super(id, sign, weight);
            this.id = id.getValue();
            this.sign = sign.getValue();
            this.weight = weight.getValue();
        }
    }

    public static class Option extends DynamicStruct {
        public BigInteger id;

        public String name;

        public String image;

        public String describe;

        public Option(BigInteger id, String name, String image, String describe) {
            super(new org.web3j.abi.datatypes.generated.Uint256(id), 
                    new org.web3j.abi.datatypes.Utf8String(name), 
                    new org.web3j.abi.datatypes.Utf8String(image), 
                    new org.web3j.abi.datatypes.Utf8String(describe));
            this.id = id;
            this.name = name;
            this.image = image;
            this.describe = describe;
        }

        public Option(Uint256 id, Utf8String name, Utf8String image, Utf8String describe) {
            super(id, name, image, describe);
            this.id = id.getValue();
            this.name = name.getValue();
            this.image = image.getValue();
            this.describe = describe.getValue();
        }
    }

    public static class VoteInfo extends DynamicStruct {
        public String title;

        public String image;

        public String describe;

        public BigInteger startTime;

        public BigInteger endTime;

        public VoteInfo(String title, String image, String describe, BigInteger startTime, BigInteger endTime) {
            super(new org.web3j.abi.datatypes.Utf8String(title), 
                    new org.web3j.abi.datatypes.Utf8String(image), 
                    new org.web3j.abi.datatypes.Utf8String(describe), 
                    new org.web3j.abi.datatypes.generated.Uint256(startTime), 
                    new org.web3j.abi.datatypes.generated.Uint256(endTime));
            this.title = title;
            this.image = image;
            this.describe = describe;
            this.startTime = startTime;
            this.endTime = endTime;
        }

        public VoteInfo(Utf8String title, Utf8String image, Utf8String describe, Uint256 startTime, Uint256 endTime) {
            super(title, image, describe, startTime, endTime);
            this.title = title.getValue();
            this.image = image.getValue();
            this.describe = describe.getValue();
            this.startTime = startTime.getValue();
            this.endTime = endTime.getValue();
        }
    }

    public static class Voted extends StaticStruct {
        public BigInteger weight;

        public BigInteger optionId;

        public Voted(BigInteger weight, BigInteger optionId) {
            super(new org.web3j.abi.datatypes.generated.Uint256(weight), 
                    new org.web3j.abi.datatypes.generated.Uint256(optionId));
            this.weight = weight;
            this.optionId = optionId;
        }

        public Voted(Uint256 weight, Uint256 optionId) {
            super(weight, optionId);
            this.weight = weight.getValue();
            this.optionId = optionId.getValue();
        }
    }

    public static class VoteResultVo extends StaticStruct {
        public BigInteger id;

        public BigInteger votes;

        public VoteResultVo(BigInteger id, BigInteger votes) {
            super(new org.web3j.abi.datatypes.generated.Uint256(id), 
                    new org.web3j.abi.datatypes.generated.Uint256(votes));
            this.id = id;
            this.votes = votes;
        }

        public VoteResultVo(Uint256 id, Uint256 votes) {
            super(id, votes);
            this.id = id.getValue();
            this.votes = votes.getValue();
        }
    }
}
